/*
*********************************************************************************************************
*
*	模块名称 : BSP模块
*
*********************************************************************************************************
*/

#ifndef _BSP_DMA_H_
#define _BSP_DMA_H_

#include "NuMicro.h"

/*******************************************************************************
*	配置 , 舍弃功能->跨步,表中断禁用, scatter
*   BURST模式仅用于内存到内存数据传输，该模式一个触发信号完成全部数据传输
*******************************************************************************/
typedef struct
{
	uint8_t req_src;		// ref . src list
	uint8_t prio;			// 0,1
	uint8_t int_en;			// 0,1 =>for isr
	uint32_t ctr_sa_mode;	// PDMA_SAR_INC, PDMA_SAR_FIX
	uint32_t ctr_da_mode;	// PDMA_DAR_INC, PDMA_DAR_FIX
	uint32_t ctr_txt_mode;	// PDMA_REQ_SINGLE, PDMA_REQ_BURST | PDMA_BURST_x
	uint32_t ctr_width;		// PDMA_WIDTH_8 | PDMA_WIDTH_16 | PDMA_WIDTH_32
	uint32_t ctr_amount;	// amount to trans
	uint32_t sa;			// src data addr
	uint32_t da;			// des data addr
	void (*call_back)(int err);
} pdma_basic_cfg_type;

// init
void bsp_pdma_init(void);

// 请求一个通道 2-15。 通道0和1由app自行分配
char bsp_pdma_alloc(void);
// 配置通道
// 返回-1代表申请失败
void bsp_pdma_cfg(const pdma_basic_cfg_type *cfg, char ch);

// 释放通道
char bsp_pdma_free(char ch);

// 辅助功能
uint8_t bsp_pdma_intsts_clr(char ch);
uint8_t bsp_pdma_td_state(char ch);
void bsp_pdma_sw_tig(char ch);

#endif

